const fs = require('fs');
const path = require('path');
const readline = require('readline');

// 定义正则表达式，匹配 [+数字] 格式的字符串
const regex = /\[\+(\d+)\]/;

// 支持的文本文件扩展名
const supportedExtensions = ['.php', '.vue', '.js', '.html', '.txt'];

// 递归遍历目录并通过回调函数返回结果
function traverseDirectory(dir, callback) {
    let results = [];
    let pendingFiles = 0; // 用于跟踪未完成的文件读取操作

    // 递归遍历目录
    function traverse(dir) {
        const files = fs.readdirSync(dir);

        files.forEach(file => {
            const filePath = path.join(dir, file);
            const stat = fs.statSync(filePath);

            // 如果是目录，递归遍历
            if (stat.isDirectory()) {
                traverse(filePath);
            } else if (stat.isFile() && supportedExtensions.includes(path.extname(filePath))) {
                // 如果是支持的文本文件，逐行读取
                pendingFiles++; // 增加未完成文件的计数
                processFile(filePath, file, () => {
                    pendingFiles--; // 文件处理完成后减少计数
                    if (pendingFiles === 0) {
                        // 所有文件处理完成后，调用回调函数
                        callback(null, results);
                    }
                });
            }
        });
    }

    // 处理单个文件
    function processFile(filePath, fileName, onComplete) {
        const rl = readline.createInterface({
            input: fs.createReadStream(filePath),
            output: process.stdout,
            terminal: false
        });

        let lineNumber = 0;

        // 逐行读取文件内容
        rl.on('line', (line) => {
            lineNumber++;
            const match = line.match(regex);

            // 如果匹配到符合条件的行
            if (match) {
                const number = parseInt(match[1], 10);

                // 将行号、文件名和数字组成对象，并存入数组
                results.push({
                    lineNumber: lineNumber,
                    fileName: fileName,
                    filePath: filePath, // 添加文件路径以便定位
                    number: number
                });
            }
        });

        // 文件读取完成后，调用 onComplete
        rl.on('close', onComplete);
    }

    // 开始遍历目录
    traverse(dir);
}

async function trans(directoryPath) {

    try {
        const results = traverseDirectory(directoryPath, (err, results) => {
            if (err) {
                console.error('遍历目录时出错:', err);
                return;
            }

            // 按 number 倒序排列
            results.sort((a, b) => b.number - a.number);

            // 输出结果
            // console.log(results);

            // 输出 number 的最大值
            if (results.length > 0) {
                console.log('[+10026] 最大的 number 值是:', results[0].number);
                console.log(`[+10026] 下一个序号是:  [+${results[0].number+1}]`);
            } else {
                console.log('[+****+] 没有找到符合条件的行。');
            }
        });
    } catch (err) {
        console.error('遍历目录时出错:', err);
    }
}

module.exports = { trans }